/*
 * Elemento.cpp
 *
 *  Created on: 03/05/2011
 *      Author: angeles
 */

#include "Elemento.h"

Elemento::Elemento() : ID(-1) {}

Elemento::Elemento(const string& termino, int ID) : termino(termino), ID(ID) {}

void Elemento::set_termino(const string& termino) {
	this->termino = termino;
}

void Elemento::set_ID(int ID) {
	this->ID = ID;
}

int Elemento::get_tam() {
	int tam = 0;

	stringstream ss1;
	ss1 << this->termino.size() << ' ';
	string s(ss1.str());
	tam += s.size();
	s.clear();

	tam += this->termino.size();

	stringstream ss2;
	ss2 << this->ID << ' ';
	s = ss2.str();
	tam += s.size();

	return tam;
}

void Elemento::serializar(char* buffer, unsigned int& offset) {
	int size = this->termino.size();
	char* aux = (char*) malloc (sizeof(char) * (size + 1));
	this->termino.copy(aux, size);
	aux[size] = '\0';
	Persistencia::PonerStringEnChar(buffer, offset, aux);
	free(aux);

	Persistencia::PonerEnteroEnChar(buffer, offset, this->ID);
}

void Elemento::hidratar(char* buffer, unsigned int& offset) {
	this->termino = Persistencia::getStringDesdeBuffer(buffer, offset);
	this->ID = Persistencia::getEnteroDesdeBuffer(buffer, offset);
}

void Elemento::toString(ostream& os) {
	os << "      Elemento --> " << endl;
	os << "        Término:   " << this->termino << endl;
	os << "        ID:   " << this->ID << endl;
	os << "        Tamaño ocupado:   " << this->get_tam() << " Bytes" << endl;
}
